查看原文
其他

软件测试周刊(第24期):最不重要的素质就是智商

毕小烦 毕小烦 2022-11-07

▲ 点击上方第二个“毕小烦”关注公众号

这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。


本周刊开源(GitHub: SoftwareTestingWeekly ),欢迎提交 issue,投稿或推荐软件测试相关的内容。

科普

Windows11

杨净 梦晨 

微软 CEO 纳德拉曾说,这将是 Windows 十年来最大一次更新。近日  Windows11 提前曝光!全新 UI 引发争议,有网友说:一股苹果味儿。


来感受一下:

文章

1. 施一公:最不重要的素质就是智商

施一公

施一公是少数在公众领域享有很高知名度的自然科学家。


施一公说:“无论什么学科,物理、工程、生物、文科,我认为最不重要的是智商”。


那最重要的是什么呢?


他认为,对于科学研究而言,最重要的三个方面则是:

  • 时间的付出:任何人不付出时间,一定不会有成功。不要以为你可以耍小聪明,世界上没有免费的晚宴,这是亘古不变的道理。

  • 方法论的改变

  • 建立批判性思维:挑战学术权威。怀疑是科学发现的推动力。


文章中还有很多金句,我摘录了几个:


  1. 我觉得兴趣是可以培养的,不是说你天生就有,不是说你听一个讲座突然灵机一动就对一件事感兴趣,我觉得都不是这样。


  1. 我认可一点:不要给自己理由 —— 当你觉得兴趣不足、没有坚定信心、家里出了事情、需要克服心理阴影、面对痛苦往前走的时候,不论家庭、个人生活、兴趣爱好等方面出现什么状况,你应该全力以赴,应该处理好自己的生活,往前走。不要给自己理由。因为你一旦掉队了以后,你的心态会改变,很难把心态纠正过来。


  1. 放眼望向你周围,当别人和你差不多聪明的时候,你会觉得别人比你聪明。所以当你觉得别人比你聪明的时候,他并不一定比你聪明,不要太自卑。


  1. 我还有一个性格特点是好胜。在座的同学可能很多和我一样,如果不好胜、不自强也很难走到今天,但特别好胜、特别自强的人也更容易受打击,也更容易自卑。很多情况下,你的个性决定了你的将来。我很自卑,但我又很好胜。

2. 玉伯:开源有带给我什么

Alibaba F2E

本文是玉伯在 2021 年 527 蚂蚁技术日上的分享。


我从 2009 年到 2018 年,接近十年时间,一直在做开源的一些事情,在这个过程中收获了很多东西。今天就和大家分享一下这十年我的一些收获和感触。


收获之一:高效工作


高效工作包括三点:

  1. 文档优先

    • 在文档优先这方面,老外比我们重视太多了。

    • 有的项目可能还只是个空壳,但里面已经讨论很多了,把很多想法思路、怎么做、可能遇到什么坑这些问题,通过文档和讨论,想的比较清楚了才动手去写代码。

    • 当你真的深度参与开源,并且以文档先行的方式去实践的话,你的收获会非常之大。

  1. 异步协作

    • 人们通常进行交流的手段就是听说读写。

    • 其中读和写是比听和说更高维度的手段,需要更多逻辑和抽象能力,更有助于问题的及早解决。

  1. 求同尊异

    • GitHub 上有些项目参与人数众多,大家参与讨论很激烈。

    • 如何在有分歧的情况下达成共识,以及不仅达成共识而是让社区往前走一步,这是需要一些领导力,以及一些意见领袖做出一些牺牲的。


在这里,求同尊异不是很虚的词,而是很实际的原则,影响你的很多取舍。


收获之二:学做产品


如果你把开源项目做为一个产品去打造,一定会遇到产品的灵魂三问:

  1. 为什么要做?(产品的客户是谁?差异化价值在哪?)

  2. 为什么是我做?(是我擅长的领域吗?为什么?)

  3. 边界在哪?(取舍定位 & 生态协同)


每一个开源项目在决定要不要去做的时候,都要问自己这几个问题。这其实和很多业务和产品遇到的问题很类似,你必须回答清楚之后才能再往前走一步。


收获之三:对事的热爱


但凡你曾经经历过为开源而疯狂,你就会理解什么叫热爱。而如果你没有疯狂过,热爱对你来说只是两个字而已。


把开源当做自己的事业的时候,即使生活上很朴素,你也可以过的很开心。当你写代码的时候想着怎么写的更好,某个内存占用怎么降低一点点,某个性能怎么提高一点点,当你满脑子在想这些的时候,一些物欲得失也就没那么重要了。


希望同学们通过开源,去参与和主导项目,能够感受到这份热爱。持续去感受过几份热爱之后,我觉得你整个人都会不一样的,面对许多事情,你会活的更通透,更透彻。


前不久在推特上看到一句话让我挺有感触,他主要说的是:

很多人说工作要跟对人,但其实没什么关系,跟你工作的地方和公司也没关系,跟什么人不如跟随自己的内心。真正一个人在职场生涯往前走,应该找到的是你的 mission 和 calling,还有找到对你有意义和热爱的一些事情。

3. 你需要了解的 APP 安全知识

小道安全

怎样的 APP 是安全的呢?

只要攻击者所花费的时间成本和精力超过其攻击逆向破解后获取到的收益,那么你的 APP 就相对安全。


作者以安全开发的角度出发,梳理了一个 APP 需要关注的安全问题。


一. 应用安全


1.1 二进制安全:

  1. 环境检测:

    • 检测模拟器:特有文件、模块、特征、代理类等等。

    • 检测 root:特有刷 root 工具的包名称、特有 root 的文件路径。 

  1. 反注入检测:

    • 注入工具: zygote 属于全局注入(xposed 工具)、ptrace 单进程注入(frida 工具)。

    • 检测方式:

      • 检测 APP 自身的 /proc/%d/maps 模块是否有第三方 so 模块。

      • 优先把自身 ptrace,那么其他就无法注入。

  1. 反调试检测:

    • 调试工具:用 jeb、IDA、GDB 等工具调试分析代码和数据。

    • 反调试方式:

      • 检测 /proc/%d/status/proc/pid/stat/proc/pid/task/pid/stat 状态值。

      • 检测调速器端口和名称和通信的关键文件信息。

  1. 代理检测:检测校验抓包所需要安装的证书信息。


1.2 敏感数据安全:

  1. 代码中敏感 URL:

    • 存在问题:直接将访问的网址或访问的 IP 地址硬编码写到代码中。

    • 攻击方式:攻击者可通过反编译获取此类信息,并将其作为攻击目标。

  1. APP 中敏感数据:

    • 存在问题:代码或配置文件中,存储着敏感而且没有进行做加密保护的数据。

    • 攻击方式:

      1. 利用 apktool 反编译 APP,然后查看二进制代码数据,就能直观的看到敏感的操作调用敏感数据。

      2. 通过代理模式进行抓包就可以直接抓到 APP 运行中的操作的敏感数据。

  1. 通用加密算法参数:代码中往往会出现一些保护敏感信息的常量字符串,例如在代码中硬编码 AES 加密的 key、iv 等,或者用户的 VPN 密码等等。


1.3 敏感资源安全:

  • 存在问题:APP 中的一些关键资源文件没有进行加密保护。

  • 攻击方式:攻击者可以从 APP 中提取关键的资源文件,进行二次使用或从资源文件中获取本地业务逻辑代码,从而对 APP 发起攻击。


1.4 完整性安全:

  • 存在问题:开发者如果没有对开发的 APP 进行做完整性校验。

  • 攻击方式:攻击者用 androidkiller 工具进行对 APP 功能的逆向修改,例如对 APP 植入恶意代码,木马、广告等等。对这些修改 APP 后,进行重新签名发布,会导致包的完整性被破坏。


1.5 证书存储安全:

  • 明文存储的数字证书如果被篡改,APP 客户端可能会连接到攻击者的服务器上,导致 APP 的敏感信息被盗取。

  • 如果明文证书被盗取,可能会造成传输数据被拦截解密,伪造第三方的 APP 客户端向服务器进行发送请求,篡改服务器中的关键数据或者造成服务器响应异常。


二. 组件安全


组件暴露会影响到 APP 应用的逻辑核心和泄露用户敏感信息,攻击者只要通过组件利用的方式就可以获取到关键信息,那么就会导致关键信息被泄露的风险。


保护方式:

在 APP 中如果非必要的组件不要进行导出;如果组件一定要提供给外部进行调用的话,可以对组件的权限进行控制。


三. 运行时安全


  • 日志输出:

    • 存在问题:日志信息往往会记录着一些敏感信息,如:用户名、密码、函数调用栈信息、Token、Cookies、网络请求 IP 或 URL 等等,在发布的 APP 时常会漏掉或者忘记将日志输出的信息进行删除。

    • 攻击方式:只要用 monitor工具就可以分析 APP 运行的敏感日志信息。攻击者可以将此作为攻击的入口点。

  • 数据存储:

    • 存在问题:APP 运行时候会进行记录或存储一些敏感信息:个人隐私、登录信息、本地验证码、聊天记录等等。

    • 攻击方式:存储的信息直接可以用 MT 管理工具或者直接用 adb 复制传输到外部电脑主机上,再通过可视化工具进行打开查看文件,会造成配置信息或敏感的账号信息泄露。

    • 保护方式:对于运行时的读写操作本地数据存储,在本地操作关键敏感信息,进行用一些加密算法进行做保护。


四. 通信安全


  • 存在问题:在 APP 通信过程中数据传输协议以及字段数据没有加以保护。

  • 攻击方式:攻击者可以通过对这些包进行分析伪造假的数据包等进行做影响 APP 安全的事情。

  • 保护方式:

    • 建议在通信传输功能可以采用SSL协议进行传输,并在客户端和服务端证书信息和关键数据加密和进行校验。

    • 加密过程中尽量避免使用 CBC 模式。

工具

1. 免广告看遍所有视频网站 - uBlock Origin

毕小烦

你平时在哪个网站看视频?优酷?腾讯?爱奇艺?芒果 TV ?还是 Youtube?不管哪个网站,没买会员是不是得先看段广告?


如何才能跳过这些片头广告呢?


用 uBlock Origin 。



uBlock Origin 发音为 you-block origin (/ˈjuːˌblɒk/) ,是一款开源的适用于多种浏览器的高效拦截器插件,本质上它不是广告拦截器,而是一种通用的拦截器,只是恰好能够起到“广告拦截器”的作用。


基本信息

名称

uBlock Origin

版本

1.35.2

浏览器

Chrome、FireFox、Edge、Opera

适用平台

macOS、Windows、Linux

开源地址

https://github.com/gorhill/uBlock


功能特性

  • 屏蔽视频网站的广告

  • 屏蔽恶意软件站点

  • 屏蔽网站跟踪器

  • 屏蔽网站的所有弹窗

  • 屏蔽网站的大型媒体元素

  • 禁用网站的所有脚本

  • ...


2. 一键直达页面顶部或底部 - Scroll To Top Button

毕小烦

我们在浏览网页时,可能会想快速到达页面的顶部或底部,该怎么做呢?


用 Scroll To Top Button。


Scroll To Top Button 是一款浏览器插件,支持 Chrome、FireFox、Edge、Opera,它能够让你快速到达页面的顶部或底部,可以选择使用按钮或快捷键。


基本信息

名称

Scroll To Top Button

版本

10.0.3

浏览器插件

Chrome、FireFox、Edge、Opera

适用平台

macOS、Windows、Linux

开源地址

https://github.com/PoziWorld/Scroll-to-Top-Button-Extension


3. 找出源代码中的性能问题 - Pyroscope

吴柏毅

Pyroscope 是一个开源的持续性能剖析平台。


它能够帮你:

  • 找出源代码中的性能问题

  • 解決 CPU 过度使用的问题

  • 理解应用程序的调用树

  • 追踪随时间变化的情况


功能特性:

  • 可以存储下多个应用程序长时间的 profiling 数据

  • 你可以一次查看多年的数据或单独查看特定的事件

  • 较低的 CPU 开销

  • 数据压缩效率高,磁盘空间要求低

  • 友好体验的 UI

  • 支持 Go、Ruby 和 Python


开源地址:https://github.com/pyroscope-io/pyroscope

方法

1. 腾讯是如何高效的测试 Feeds 的?

lynnmi  

Feeds 是什么?


Feeds 一种给用户持续提供内容的数据形式,由多个内容提供源组成的资源聚合器,由用户主动订阅消息源并且向用户提供内容。


测试重点是什么?


样式和功能。


样式?


样式是指 Feed 下滑过程中每一个条目所展现的形式。


如下图所示:

Feeds 处理流程:

测试面临的问题:

  • 样式多:66个

  • 覆盖全:样式分布不均,需要全覆盖。

  • 消耗大:不断的刷样式(2小时)+ 白名单下发样式(等生效时间长) = 两周发一版

解决需求分析:

  • 减少后台频繁配置下发数据的频率

  • 能准确获取并存储外网真实数据

  • 能将外网数据准确发给客户端使用

  • 能按需整合不同样式,并下发

  • ....

解决方案设计:

  • 契约测试:在多个互相依赖的模块之间订立契约(Contract),每个模块都只对契约负责,不关心契约背后消费者(Consumer)。而消费者则只针对契约依赖,不关注契约背后的服务方(Provider)。

  • 借鉴 Sinon.js 的契约测试方案

  • 应用场景

    • 前端开发自测依赖 Provider 提供数据

    • DailyBuild 自动化冒烟验证

    • 手工集成测试中使用

    • 自动化性能数据收集

最终收益

  • 发版节奏两周缩短到一周

  • 集成测试时间 6H+ 缩短至 2.4H 左右


2. 新东方云教室是如何做移动端专项测试的?

房建宇

一. 安全测试:以发现安全隐患为目标


  • 软件权限

    • 校验隐私泄露风险:包括访问手机信息、接入互联网、用手机拍照或录音、读取用户数据、写入用户数据;

    • 校验输入有效性:对认证、授权、敏感数据存储、数据加密等方面进行检测;

    • 校验有无数据泄漏、非法授权访问等;

  • 安装卸载和升级安全性

    • 校验 App 的安装卸载和升级过程中对系统资源的占用;

    • 校验覆盖安装,升级安装的情况下前后数据的一致性;

  • 数据安全性

    • 校验敏感数据会不会被存储,会不会被破解;

    • 校验密码长度,且不以明文显示;

    • 校验应用程序读和写数据正确,如果数据库中重要的数据正要被重写,应及时告知用户;

  • 通讯安全性

    • 校验 APP 运行过程中,被通信(来电、短信、蓝牙、红外、NFC 等通讯或充电时)打断,是否能暂停程序,优先处理通信,之后能恢复软件原来的状态;

    • 校验 APP 应能处理网络异常、通讯延时或中断,并能及时将异常情况通报用户;

  • 人机接口安全性

    • 校验返回功能总保持可用;

    • 校验手机的功能设置不影响应用程序的功能,如声音、亮度、息屏时间、护眼模式等;

    • 校验应用程序必需能够处理不可预知的用户操作, 例如错误的操作和同时按下多个键;


二. 静态代码检查


  • 动态检查:程序运行时检查,侧重于内存和资源使用情况检查;

  • 静态检查:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。

  • 可用工具:

    • OCLint:一款静态代码分析器,可用于分析 C, C++ 和 Objective-C 代码中隐含的问题;

    • infer:facebook 开源的一款静态代码扫描工具,可以对 Java、C 和 Objective-C 程序进行分析

    • SonarQube:是一个开源平台,用于管理源代码的质量。


三. 性能测试:评估 APP 的时间和空间的特性


  • 压力测试:多人在线时,测试 FPS 以及数据上报的稳定性;

  • 性能评估:

    • 每两秒一次的数据打点监控;

    • 第三方软件数据监控测试;

  • 竞品对比:从产品功能和易用性角度对比调优,根据业务需要也应该关注安全、性能、兼容性等方面的问题。


四. 兼容性测试


  • 手机兼容:手机型号、操作系统、屏幕形状、刷新率。Android TOP 300、iOS TOP 100;

  • 网络兼容:3G、4G、5G、WIFI、5G-WIFI;

  • 版本兼容:APP 新旧版本兼容性测试;

  • SDK 兼容:第三方 SDK 兼容性测试。

言论

1、

不管见识高低,一个人深度整理和收拾自己的内心,这事本身就很迷人。

-- 黎戈

2、

3、美德肥

图片

1、灭不尽的 BUG,刚灭 1 个 又多一群...

2、修复错误的时间 VS 错误的愚蠢程度

3、前第一夫人不堪其扰啊



(完)


点击下方卡片关注毕小烦,和众多读者一起学习交流

 击上方卡片关注毕小烦,一起成为更好的自己。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存